package com.example.yxweather.util


import com.example.yxweather.WeatherApplication
import com.example.yxweather.apis.ApiService
import com.example.yxweather.storage.TokenPreferences
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit

object RetrofitClient {
    // 定义基础的URL常量 徐洪俊 http://192.168.31.39:3000/
    const val BASE_URL = "http://192.168.31.39:3000/"

    // 创建 okHttpClient 并在请求头中 根据jwt的格式携带token
    private val okHttpClient = OkHttpClient.Builder()
        .addInterceptor { chain ->
            val request = chain.request().newBuilder()
                // 增加 读取 ，请求超时时间以及日志功能

                .addHeader(
                    "Authorization", "Bearer ${
                        TokenPreferences.getInstance(
                            WeatherApplication.getInstance()
                        ).getToken()
                    }"
                )
                .build()
            chain.proceed(request)
        }
        .addInterceptor( // 日志输出拦截器
            HttpLoggingInterceptor()
                .setLevel(HttpLoggingInterceptor.Level.BODY)
        )
        .connectTimeout(30, TimeUnit.SECONDS) // 设置超时时间
        .readTimeout(30, TimeUnit.SECONDS) // 读取超时
        .build()


    // 使用延迟初始化，确保在第一次需要使用 ApiService 时才创建实例，避免资源浪费
    val apiService: ApiService by lazy {
        // 创建Retrofit构建器
        Retrofit.Builder()
            // 设置基础URL
            .baseUrl(BASE_URL)
            .client(okHttpClient)
            // 添加GSON数据解析器
            .addConverterFactory(GsonConverterFactory.create())
            // 构建Retrofit实例并生成网络请求接口
            .build()
            .create(ApiService::class.java)
    }
}